import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import org.apache.log4j.Logger;

import etxt2db.creator.ComponentCreator;
import etxt2db.parsing.Parser;
import etxt2db.utils.Triple;


public class ParseSpecification {
	
	private static String loadSpecification(String path) throws IOException{
		StringBuffer buf = new StringBuffer();
		File file = new File(path);
		FileReader fr = new FileReader(file);
		BufferedReader in = new BufferedReader(fr);
        
        String input;
        
        while ((input = in.readLine()) != null) {
        	buf.append(input + "\n");
        }
	        
        in.close();
        fr.close();
        
        return buf.toString();
	}

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		Logger.getRootLogger().removeAllAppenders();
		//O parser é o objecto que trata da interpretação das queries
		//Pensa nele como o teu motor de execução
		//O constructor recebe um parâmetro que corresponde à directoria onde
		//vais guardar os classificadores gerados.
		Parser p = new Parser("testAnnotators/");
		
		//Uma função simples para ir buscar a especificação a um ficheiro
		//e converter para uma String
		String query = loadSpecification("examples/specification/trainSeminarsDefault.txt");
		System.out.println(query);
		
		//Este é o método que tens de chamar para interpretar a query
		List<Triple<String, List<String>, List<String>>> info = p.interpretQuery(query);
		
		for(Triple<String, List<String>, List<String>> results : info) {
			ComponentCreator compCreator = new ComponentCreator();
			try {
				compCreator.generateComponentFromModel(results.getFirst(),"testAnnotators/",results.getSecond(),results.getThird(),p.getMapper().getContent());
			} catch (ParserConfigurationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (TransformerException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

}
